#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <cassert>
#include <sys/wait.h>

using namespace std;

int main()
{
    // 有没有涉及到将数据设置进内核中呢？没有！！！
    // sigset_t数据类型，int double float class没有差别
    // sigset_t s;  // 用户栈上开批了空间
    // sigemptyset(&s);
    // sigaddset(&s, 2);
    // pid_t id = fork();
    // if(id == 0)
    // {
    //     sleep(2);
    //     int a = 10;
    //     a /= 0; // 故意异常，收到SIGFPE-> core
    //     exit(0);
    // }

    // father
    int status = 0;
    pid_t rid = waitpid(id, &status, 0);
    if(rid > 0)
    {
        std::cout << "exit code: " << ((status>>8) & 0xFF) << std::endl; // 没有意义
        std::cout << "exit signal: " << (status & 0x7F) << std::endl;
        std::cout << "core dump: " << ((status>>7) & 0x1) << std::endl;
    }

    std::cout << "run begin ..." << std::endl;
    int a = 10;
    a /= 0; // SIGFPE -> Core

    std::cout << "run end ..." << std::endl;

    while(true) sleep(1);
    return 0;
}